#include <iostream>
#include <strings.h>
#include <signal.h>
#include <unistd.h>
#include <cstdlib>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;

int main()
{
    signal(SIGCHLD, SIG_IGN);
    if (fork() == 0)
    {
        cout << "child process pid :" << getpid() << endl;
        sleep(3);
        exit(1); 
    }
    while (1) {}
    return 0;
}



// void handler(int signo)
// {
//     cout << "get a signo: " << signo << endl;
//     pid_t id;
//     while ((id = waitpid(-1, nullptr, WNOHANG)) > 0)
//         cout << "wait child success :" << id << endl;
// }

// int main()
// {
//     signal(SIGCHLD, handler);
//     pid_t cid;
//     if ((cid = fork()) == 0)
//     {
//         cout << "child process pid :" << getpid() << endl;
//         sleep(3);
//         exit(1);
//     }
//     while (1) {}
//     return 0;
// }

// void handler(int signo)
// {
//     cout << "get a signo:" << signo << endl;
// }

// int main()
// {
//     struct sigaction act, oact;
//     bzero(&act, sizeof(act));
//     bzero(&oact, sizeof(oact));

//     act.sa_handler = handler;
//     act.sa_flags = 0;
//     sigemptyset(&act.sa_mask);

//     sigaction(2, &act, &oact);
//     while (1)
//     {
//         cout << "pid:" << getpid() << endl;
//         sleep(1);
//     }
//     return 0;
// }
